package org.jweb.core.util.extend;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Properties;
import java.util.Set;

/**
 * java.version
 * Java 运行时环境版本
 * 
 * java.vendor
 * Java 运行时环境供应商
 * 
 * java.vendor.url
 * Java 供应商的 URL
 * 
 * java.home
 * Java 安装目录
 * 
 * java.vm.specification.version
 * Java 虚拟机规范版本
 * 
 * java.vm.specification.vendor
 * Java 虚拟机规范供应商
 * 
 * java.vm.specification.name
 * Java 虚拟机规范名称
 * 
 * java.vm.version
 * Java 虚拟机实现版本
 * 
 * java.vm.vendor
 * Java 虚拟机实现供应商
 * 
 * java.vm.name
 * Java 虚拟机实现名称
 * 
 * java.specification.version
 * Java 运行时环境规范版本
 * 
 * java.specification.vendor
 * Java 运行时环境规范供应商
 * 
 * java.specification.name
 * Java 运行时环境规范名称
 * 
 * java.class.version
 * Java 类格式版本号
 * 
 * java.class.path
 * Java 类路径
 * 
 * java.library.path
 * 加载库时搜索的路径列表
 * 
 * java.io.tmpdir
 * 默认的临时文件路径
 * 
 * java.compiler
 * 要使用的 JIT 编译器的名称
 * 
 * java.ext.dirs
 * 一个或多个扩展目录的路径
 * 
 * os.name
 * 操作系统的名称
 * 
 * os.arch
 * 操作系统的架构
 * 
 * os.version
 * 操作系统的版本
 * 
 * file.separator
 * 文件分隔符（在 UNIX 系统中是“/”）
 * 
 * path.separator
 * 路径分隔符（在 UNIX 系统中是“:”）
 * 
 * line.separator
 * 行分隔符（在 UNIX 系统中是“/n”）
 * 
 * user.name
 * 用户的账户名称
 * 
 * user.home
 * 用户的主目录
 * 
 * user.dir
 * 用户的当前工作目录
 * 
 * @author cp
 */
public class SystemProperty {

//	public static void main(String args[]) throws Exception {
//		System.out.println(getSystemContent());
//	}
	
	/**
	    * 获取Java运行时环境信息
	    */
	    public static StringBuilder getSystemContent() throws Exception {
	    	String line = getLine();
	    	//通过StringBuilder来构建要输出的内容
	        StringBuilder sb = new StringBuilder();
	        sb.append("Java 运行时环境版本:"+System.getProperty("java.version")+line);
	        sb.append("Java 运行时环境供应商:"+System.getProperty("java.vendor")+line);
	        sb.append("Java 供应商的URL:"+System.getProperty("java.vendor.url")+line);
	        sb.append("Java 安装目录:"+System.getProperty("java.home")+line);
	        sb.append("Java 虚拟机规范版本:"+System.getProperty("java.vm.specification.version")+line);
	        sb.append("Java 虚拟机规范供应商:"+System.getProperty("java.vm.specification.vendor")+line);
	        sb.append("Java 虚拟机规范名称:"+System.getProperty("java.vm.specification.name")+line);
	        sb.append("Java 虚拟机实现版本:"+System.getProperty("java.vm.version")+line);
	        sb.append("Java 虚拟机实现供应商:"+System.getProperty("java.vm.vendor")+line);
	        sb.append("Java 虚拟机实现名称:"+System.getProperty("java.vm.name")+line);
	        sb.append("Java 运行时环境规范版本:"+System.getProperty("java.specification.version")+line);
	        sb.append("Java 运行时环境规范供应商:"+System.getProperty("java.specification.vendor")+line);
	        sb.append("Java 运行时环境规范名称:"+System.getProperty("java.specification.name")+line);
	        //sb.append("---------------------------------------------------------------------"+line);
	        sb.append("Java 类格式版本号:"+System.getProperty("java.class.version")+line);
	        sb.append("Java类路径："+System.getProperty("java.class.path")+line);
	        sb.append("加载库时搜索的路径列表:"+System.getProperty("java.library.path")+line);
	        sb.append("默认的临时文件路径:"+System.getProperty("java.io.tmpdir")+line);
	        sb.append("要使用的 JIT 编译器的名称:"+System.getProperty("java.compiler")+line);
	        sb.append("一个或多个扩展目录的路径:"+System.getProperty("java.ext.dirs")+line);
	        sb.append("操作系统的名称:"+System.getProperty("os.name")+line);
	        sb.append("操作系统的架构:"+System.getProperty("os.arch")+line);
	        sb.append("操作系统的版本:"+System.getProperty("os.version")+line);
	        sb.append("文件分隔符（在 UNIX 系统中是“/”）:"+System.getProperty("file.separator")+line);
	        sb.append("路径分隔符（在 UNIX 系统中是“:”）:"+System.getProperty("path.separator")+line);
	        sb.append("行分隔符（在 UNIX 系统中是“/n”）:"+System.getProperty("line.separator")+line);
	        sb.append("用户的账户名称:"+System.getProperty("user.name")+line);
	        sb.append("用户的主目录:"+System.getProperty("user.home")+line);
	        sb.append("用户的当前工作目录:"+System.getProperty("user.dir")+line);
			return sb;
	    }
	
	    public static void test() throws Exception {
	    	StringBuilder sb = new StringBuilder();
	    	sb = getSystemContent() ;
	     
	        //新建一个文件，如果该文件不存在则创建一个
//	        File file = new File("c:\\t.txt");
	        File file = new File("./log/t.txt");
	        if( !file.exists()){
	            file.createNewFile();
	        }
	        OutputStream ous = new FileOutputStream(file);
	     
	        //获取系统的属性
	        Properties ps = System.getProperties();
	        //获得系统属性中的键值
	        Set<String> set = ps.stringPropertyNames();
	        for(String name: set){
	            sb.append(name + " : " +ps.getProperty(name) + "\n");
	            System.out.println(name + " : " +ps.getProperty(name) );
	        }
	        ous.write(sb.toString().getBytes());
	        ous.close();
	 
//	        System.out.println(System.getProperty("os.name"));
//	        System.out.println(System.getProperty("os.version"));
//	        System.out.println("Java运行时环境版本:"+System.getProperty("java.version"));
//	        System.out.println("Java 运行时环境供应商:"+System.getProperty("java.vendor"));
//	        System.out.println("Java 供应商的URL:"+System.getProperty("java.vendor.url"));
//	        System.out.println("Java 安装目录:"+System.getProperty("java.home"));
//	        System.out.println("Java 虚拟机规范版本:"+System.getProperty("java.vm.specification.version"));
//	        System.out.println("Java 类格式版本号:"+System.getProperty("java.class.version"));
//	        System.out.println("Java 类路径："+System.getProperty("java.class.path"));
//	        System.out.println("加载库时搜索的路径列表:"+System.getProperty("java.library.path"));
//	        System.out.println("默认的临时文件路径:"+System.getProperty("java.io.tmpdir"));
//	        System.out.println("要使用的 JIT 编译器的名称:"+System.getProperty("java.compiler"));
//	        System.out.println("一个或多个扩展目录的路径:"+System.getProperty("java.ext.dirs"));
//	        System.out.println("操作系统的名称:"+System.getProperty("os.name"));
//	        System.out.println("操作系统的架构:"+System.getProperty("os.arch"));
//	        System.out.println("操作系统的版本:"+System.getProperty("os.version"));
//	        System.out.println("文件分隔符（在 UNIX 系统中是“/”）:"+System.getProperty("file.separator"));
//	        System.out.println("路径分隔符（在 UNIX 系统中是“:”）:"+System.getProperty("path.separator"));
//	        System.out.println("行分隔符（在 UNIX 系统中是“/n”）:"+System.getProperty("line.separator"));
//	        System.out.println("用户的账户名称:"+System.getProperty("user.name"));
//	        System.out.println("用户的主目录:"+System.getProperty("user.home"));
//	        System.out.println("用户的当前工作目录: "+System.getProperty("user.dir"));
	     
//	        InetAddress netAddress = getInetAddress();
//	        System.out.println("host ip:" + getHostIp(netAddress));
//	        System.out.println("host name:" + getHostName(netAddress));
	    }
	
	
	/**
	    * 获取本地主机
	    * <a href="http://my.oschina.net/u/556800" class="referer" target="_blank">@return</a> 
	    */
	    public static InetAddress getInetAddress() {
	        try {
	            return InetAddress.getLocalHost();
	        } catch (UnknownHostException e) {
	            System.out.println("unknown host!");
	        }
	        return null;
	    } 
	 
	    /**
	    * 通过InetAddress获取本地Ip
	    * @param netAddress
	    * <a href="http://my.oschina.net/u/556800" class="referer" target="_blank">@return</a> 
	    */
	    public static String getHostIp(InetAddress netAddress) {
	        if (null == netAddress) {
	            return null;
	        }
	        String ip = netAddress.getHostAddress();
	        return ip;
	    }
	 
	    /**
	    * 通过InetAddress获取本地主机的名字
	    * @param netAddress
	    * <a href="http://my.oschina.net/u/556800" class="referer" target="_blank">@return</a> 
	    */
	    public static String getHostName(InetAddress netAddress) {
	        if (null == netAddress) {
	            return null;
	        }
	        String name = netAddress.getHostName();
	        return name;
	    }
	    
	    /**
	     * java在不同系统有不同的换行符
		 * 根据操作系统 设置换行符
		 * @return 换行符
		 */
		public static String getLine(){
			String line = "\n";
			if(EPlatform.Windows.equals(OSinfo.getOSname())){
				line = "\r\n";
			}
			return line;
		}
}